using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 11/26/2013 12:14:19 PM
    /// </summary>
    [Serializable]
    public class ArchivoAdicionalLista : ReadOnlyListBase<ArchivoAdicionalLista, ArchivoAdicionalInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(ArchivoAdicionalLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static ArchivoAdicionalLista GetArchivoAdicionalLista(ModuloCriteria filter)
        {
            return DataPortal.Fetch<ArchivoAdicionalLista>(filter);
        }
        public static ArchivoAdicionalLista GetArchivoAdicionalLista(ModuloRequeridoCriteria filter)
        {
            return DataPortal.Fetch<ArchivoAdicionalLista>(filter);
        }
        private ArchivoAdicionalLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(ModuloCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_id", criteria.Id),
                        new Parametro("ec_table", criteria.Modulo)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ARCHIVOS_ADD\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ArchivoAdicionalInfo.GetArchivoAdicionalInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(ModuloRequeridoCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                        new Parametro("ec_id", criteria.Id),
                        new Parametro("ec_table", criteria.Modulo),
                        new Parametro("ec_doa_obligatorio", criteria.Requerido)
           };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ARCHIVOS_ADD_REQ\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ArchivoAdicionalInfo.GetArchivoAdicionalInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 11/26/2013 12:14:19 PM
    /// </summary>
    [Serializable]
    public class ArchivoAdicionalInfo : ReadOnlyBase<ArchivoAdicionalInfo>
    {
        #region Business Methods
        public Guid Id { get; internal set; }
        public string Nombre { get; internal set; }
        public string Modulo { get; internal set; }
        public string Obligacion { get; internal set; }
        public string Formato { get; internal set; }
        public DateTime Fecha{ get; internal set; }
        public Guid IdGlobal { get; internal set; }
        public Boolean Nuevo { get; internal set; }
        #endregion

        #region Factory Methods

        internal static ArchivoAdicionalInfo GetArchivoAdicionalInfo(DataRow childData)
        {
            return DataPortal.FetchChild<ArchivoAdicionalInfo>(childData);
        }

        private ArchivoAdicionalInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //                                   
            Id = Guid.Parse(childData["doa_id"].ToString());
            Nombre = childData["doa_nombre"].ToString();
            Modulo = childData["doa_tabla"].ToString();
            Obligacion = childData["doa_obligatorio"].ToString();
            Formato = childData["doa_formato"].ToString();
            Fecha = DateTime.Parse(childData["doa_fecha"].ToString());

            switch(Modulo)
            {
                case Valores.Modulo_Archivo_Licenciamiento: IdGlobal = Guid.Parse(childData["fal_id"].ToString()); break;
                case Valores.Modulo_Archivo_Aud_Cump:  IdGlobal = Guid.Parse(childData["fac_id"].ToString()); break;
                case Valores.Modulo_Archivo_Aud_Moni:  IdGlobal = Guid.Parse(childData["mon_id"].ToString()); break;
                case Valores.Modulo_Archivo_Aud_Pma:   IdGlobal = Guid.Parse(childData["cpm_id"].ToString()); break;
                case Valores.Modulo_Archivo_Aud_Otros: IdGlobal = Guid.Parse(childData["otr_id"].ToString()); break;
            }
            Nuevo = false;
        }

        #endregion
    }
}
